// $.ajax({
//     url:'/api/getuid',
//     success:function(res){
//         let uid = res.data.uid;

//         $.ajax({
//             url:'/api/getBill',
//             data:{
//                 uid:uid
//             },
//             success:function(data){
//                 consoel.log(data);

//                 $.ajax({
//                     url:'/api/getBill',
//                     data:{
//                         uid:uid
//                     },
//                     success:function(data){
//                         consoel.log(data);
        
//                         $.ajax({
//                             url:'/api/getBill',
//                             data:{
//                                 uid:uid
//                             },
//                             success:function(data){
//                                 consoel.log(data);
                
                                
//                             }
//                         })
//                     }
//                 })
//             }
//         })
//     }
// })

// ajax  //异步请求  不会阻塞进程

// setTimeout(() =>{},0) //异步操作

// ES6 ：promise  generator  async  

/**
 * Promise ES6原生提供的一个对象,此对象是构造函数，可以获取异步请求的信息
 * 
 * promise是解决异步编程的方案，可以把异步操作以同步的操作流程方式写出来，不用再层层嵌套
 * 
 *  let p = new Promise((resolve,reject) => {
        resolve() 成功和reject() 失败 都是函数
    })

    Promise.prototype.then(成功的回调，失败的回调)   
    
    功能：为实例添加状态变化时回调函数 

    Promise.prototype.catch(回调函数)    //报错时的回调

    Promise.prototype.finally(回调函数)  //不管状态成功失败都执行这个函数

    Promise.all()

    Promise.race() //
 * 
*/

// let a = 10;
// setTimeout(() => {
//     let a = 20;
//     console.log(a);    
// },1000)
// console.log(a);

let p = new Promise((resolve,reject) => {
    setTimeout(() => {
        resolve('uid');
    },1000)
})

console.log(p);

// p.then((res) => {
//     console.log(res);
// },(error) => {
//     console.error(error);
// })

p.then((res) => {
    console.log(res);
}).catch((error) => {
    console.error(error)
}).finally(() => {
    console.log("end");
})

//应用

function ajax(url,query){
    return new Promise((resolve,reject) => {
        let xhr = new XMLHttpRequest();

        url = query ? `${url}?${query}` : url;

        xhr.open('GET',url);

        xhr.send(null);

        xhr.onreadystatechange = () => {
            // reject(new Error('error'))
            if(xhr.readyState != 4)return;
            if(xhr.status === 200){
                resolve(xhr.responseText);
            }else{
                reject(new Error('error'))
            }
        }
    })
}

// ajax('/api/getUid').then((res) => {
//     console.log(res);
//     let data = JSON.parse(res); //data.uid
//     return ajax('/api/getBill',`uid=${data.uid}`)
// }).then((res) => {
//     console.log(res);
// }).catch((error) => {
//     console.warn(error)
// })

async function getBill(){
    // let data;
    // try{
    //     data = await ajax('/api/getUid');
    // }catch(err){
    //     console.warn(err)
    // }
    let data = await ajax('/api/getUid');
    let dataObj = JSON.parse(data);
    let billList = await ajax('/api/getBill',`uid=${dataObj.uid}`)
    return billList
}

getBill().then((res) => {
    console.log(res);
}).catch((error) =>{
    console.error(error)
})

//应用2

// img onload 加载图片的过程异步的  <img src="http://dsds.jpg"/>

// function getImg(url){
//     return new Promise((resolve,reject) =>{
//         let img = new Image();
//         img.src = url;
//         img.onload = () => {
//             resolve(img)
//         }
//         img.onerror = () =>{
//             reject(new Error('error'))
//         }
//     })
// }

// getImg('https://www.baidu.com/img/xinshouye_f097208390e839e5b5295804227d94e9.png').then((res) => {
//     document.body.appendChild(res);
// }).catch((error) => {
//     console.warn(error);
// })

// //Promise.all([promise1,promise2...])   把多个promise对象包装成一个promise对象

// //loading出现 --->  发送多个ajax(都成功后) ---> 触发then()

// Promise.all([ajax('/api/getUid'),ajax('/api/getBill')]).then((res) =>{
//     console.log(res);
//     //loading消失
// }).catch((error) =>{
//     console.warn(error);
// })

// async function getData(){
//     let getLun = await ajax('/api/getUid');
//     console.log(getLun)
//     let getList = await ajax('/api/getBill');
//     console.log(getList)
//     return [getLun,getList]
// }

// async function getData(){
//     return await Promise.all([ajax('/api/getUid'),ajax('/api/getBill')])
// }

// getData().then((res) => {
//     console.log(res);
// })








